// 从v2.11.2起，SDK 支持了 WebSocket，推荐接入；v2.10.2及以下版本，使用 HTTP
import TIM from 'tim-js-sdk';
import TIMUploadPlugin from 'tim-upload-plugin';
let options = {
	SDKAppID: 1400540218 // 接入时需要将0替换为您的即时通信 IM 应用的 SDKAppID
};
// 创建 SDK 实例，`TIM.create()`方法对于同一个 `SDKAppID` 只会返回同一份实例
let tim = TIM.create(options); // SDK 实例通常用 tim 表示
// 设置 SDK 日志输出级别，详细分级请参见 <a href="https://web.sdk.qcloud.com/im/doc/zh-cn//SDK.html#setLogLevel">setLogLevel 接口的说明</a>
tim.setLogLevel(0); // 普通级别，日志量较多，接入时建议使用
// tim.setLogLevel(1); // release 级别，SDK 输出关键信息，生产环境时建议使用
// 注册腾讯云即时通信 IM 上传插件
tim.registerPlugin({
	'tim-upload-plugin': TIMUploadPlugin
});

const chatMessage = {
	data: [],
	nextReqMessageID: undefined,
	isCompleted: false,
}

const createChat = {
	backMessage: ""
}

export default {
	chatMessage,
	createChat
}

//即时通讯登录态获取
export function TimLogin(userId, userSig) {
	console.log(userId)
	console.log(userSig)
	let promise = tim.login({
		userID: userId,
		userSig: userSig
	});
	promise.then(function(imResponse) {
		console.log(imResponse.data); // 登录成功
		if (imResponse.data.repeatLogin === true) {
			// 标识账号已登录，本次登录操作为重复登录。v2.5.1 起支持
			console.log(imResponse.data.errorInfo);
			initListener();
		}
	}).catch(function(imError) {
		console.warn('login error:', imError); // 登录失败的相关信息
	});
}

//即时通讯登录出获取
export function TimLoginOut() {
	let promise = tim.logout();
	promise.then(function(imResponse) {
	console.log(imResponse.data); // 登出成功
	}).catch(function(imError) {
	console.warn('logout error:', imError);
	});
}

//拉取群组列表
export function getGroupList() {
	// 该接口默认只拉取这些资料：群类型、群名称、群头像以及最后一条消息的时间。
	let promise = tim.getGroupList();
	// promise.then(function(imResponse) {
	// console.log(promise); 	
	// //console.log(imResponse.data.groupList); // 群组列表
	// }).catch(function(imError) {
	// //console.warn('getGroupList error:', imError); // 获取群组列表失败的相关信息
	// });
	return promise
}

//创建群组
export function createGroup(name, user2, groupId) {
	// 创建直播群;
	let promise = tim.createGroup({
		type: TIM.TYPES.GRP_AVCHATROOM, //直播群
		name: name,
		groupID: groupId,
		memberList: [{
			userID: user2
		}] // 如果填写了 memberList，则必须填写 userID
	});
	promise.then(function(imResponse) { // 创建成功
		console.log(imResponse.data.group); // 创建的群的资料
		createChat.backMessage = "creatingSuccessful"
		console.log(createChat.backMessage)
	}).catch(function(imError) {
		console.warn('createGroup error:', imError); // 创建群组失败的相关信息
		createChat.backMessage = "名称存在违禁词汇！"
		console.log(createChat.backMessage)
	});
}

//根据群 ID 搜索群组
export function searchGroupByID(name, user2, groupId,avatar) {
	let promise = tim.searchGroupByID(groupId);
	promise.then(function(imResponse) {
		const group = imResponse.data.group; // 群组信息
		createChat.backMessage = "exist";
		console.log(createChat.backMessage)
	}).catch(function(imError) {
		console.warn('searchGroupByID error:', imError); // 搜素群组失败的相关信息
		createGroup(name, user2, groupId,avatar)
	});
}

// 打开某个会话时，第一次拉取消息列表
// 下拉查看更多消息
export function getMessageList(groupId) {
	let promise = tim.getMessageList({
		conversationID: 'GROUP' + groupId,
		count: 15
	});
	promise.then(imResponse => {
		console.log("消息列表")
		console.log(imResponse.data)
		chatMessage.isCompleted = imResponse.data.isCompleted; // 表示是否已经拉完所有消息。
		chatMessage.data = imResponse.data.messageList;
		chatMessage.nextReqMessageID = imResponse.data.nextReqMessageID; // 用于续拉，分页续拉时需传入该字段。
		console.log(chatMessage.nextReqMessageID)
	});
}

// 打开某个会话时，多次拉取消息列表
// 下拉查看更多消息
export function getHistoryMessageList(groupId, nextReqMessageID) {
	let promise = tim.getMessageList({
		conversationID: 'GROUP' + groupId,
		nextReqMessageID,
		count: 15
	});
	promise.then(imResponse => {
		console.log("获取消息历史")
		console.log(imResponse.data)
		chatMessage.isCompleted = imResponse.data.isCompleted; // 表示是否已经拉完所有消息。
		chatMessage.data = imResponse.data.messageList.concat(chatMessage.data);
		chatMessage.nextReqMessageID = imResponse.data.nextReqMessageID; // 用于续拉，分页续拉时需传入该字段。
		console.log(chatMessage.nextReqMessageID)
	});
}

// 发送文本消息，Web 端与小程序端相同
// 1. 创建消息实例，接口返回的实例可以上屏
export function createTextMessage(to, content) {
	let message = tim.createTextMessage({
		to: to,
		conversationType: TIM.TYPES.CONV_GROUP,
		// 消息优先级，用于群聊（v2.4.2起支持）。如果某个群的消息超过了频率限制，后台会优先下发高优先级的消息，详细请参考：https://cloud.tencent.com/document/product/269/3663#.E6.B6.88.E6.81.AF.E4.BC.98.E5.85.88.E7.BA.A7.E4.B8.8E.E9.A2.91.E7.8E.87.E6.8E.A7.E5.88.B6)
		// 支持的枚举值：TIM.TYPES.MSG_PRIORITY_HIGH, TIM.TYPES.MSG_PRIORITY_NORMAL（默认）, TIM.TYPES.MSG_PRIORITY_LOW, TIM.TYPES.MSG_PRIORITY_LOWEST
		// priority: TIM.TYPES.MSG_PRIORITY_NORMAL,
		payload: {
			text: content
		}
	});
	// 2. 发送消息
	let promise = tim.sendMessage(message);
	return promise;
}

export function getGroupMemberList(groupID) {
	let promise = tim.getGroupMemberList({
		groupID: groupID,
		count: 30,
		offset: 0
	}); // 从0开始拉取30个群成员
	return promise;
}

// // 修改个人标配资料
// export function updateMyProfile(userName,avatar){
// 	// 修改个人标配资料
// 	let promise = tim.updateMyProfile({
// 	nick: userName,
// 	avatar: avatar,
// 	gender: TIM.TYPES.GENDER_UNKNOWN,
// 	selfSignature: '我的个性签名',
// 	allowType: TIM.TYPES.ALLOW_TYPE_ALLOW_ANY 
// 	});
// 	promise.then(function(imResponse) {
// 	console.log(imResponse.data); // 更新资料成功
// 	}).catch(function(imError) {
// 	console.warn('updateMyProfile error:', imError); // 更新资料失败的相关信息
// 	});
// }

//txim 初始化监听
export function initListener() {
	// 监听事件，例如：
	tim.on(TIM.EVENT.SDK_READY, function(event) {
		// 收到离线消息和会话列表同步完毕通知，接入侧可以调用 sendMessage 等需要鉴权的接口
		// event.name - TIM.EVENT.SDK_READY
	});
	tim.on(TIM.EVENT.MESSAGE_RECEIVED, function(event) {
		// 收到推送的单聊、群聊、群提示、群系统通知的新消息，可通过遍历 event.data 获取消息列表数据并渲染到页面
		// event.name - TIM.EVENT.MESSAGE_RECEIVED
		// event.data - 存储 Message 对象的数组 - [Message]
		chatMessage.data.push(event.data[0]);
	});
	tim.on(TIM.EVENT.MESSAGE_REVOKED, function(event) {
		// 收到消息被撤回的通知
		// event.name - TIM.EVENT.MESSAGE_REVOKED
		// event.data - 存储 Message 对象的数组 - [Message] - 每个 Message 对象的 isRevoked 属性值为 true
	});
	tim.on(TIM.EVENT.MESSAGE_READ_BY_PEER, function(event) {
		// SDK 收到对端已读消息的通知，即已读回执。使用前需要将 SDK 版本升级至 v2.7.0 或以上。仅支持单聊会话。
		// event.name - TIM.EVENT.MESSAGE_READ_BY_PEER
		// event.data - event.data - 存储 Message 对象的数组 - [Message] - 每个 Message 对象的 isPeerRead 属性值为 true
	});
	tim.on(TIM.EVENT.CONVERSATION_LIST_UPDATED, function(event) {
		// 收到会话列表更新通知，可通过遍历 event.data 获取会话列表数据并渲染到页面
		// event.name - TIM.EVENT.CONVERSATION_LIST_UPDATED
		// event.data - 存储 Conversation 对象的数组 - [Conversation]
	});
	tim.on(TIM.EVENT.GROUP_LIST_UPDATED, function(event) {
		// 收到群组列表更新通知，可通过遍历 event.data 获取群组列表数据并渲染到页面
		// event.name - TIM.EVENT.GROUP_LIST_UPDATED
		// event.data - 存储 Group 对象的数组 - [Group]
	});
	tim.on(TIM.EVENT.PROFILE_UPDATED, function(event) {
		// 收到自己或好友的资料变更通知
		// event.name - TIM.EVENT.PROFILE_UPDATED
		// event.data - 存储 Profile 对象的数组 - [Profile]
	});
	tim.on(TIM.EVENT.BLACKLIST_UPDATED, function(event) {
		// 收到黑名单列表更新通知
		// event.name - TIM.EVENT.BLACKLIST_UPDATED
		// event.data - 存储 userID 的数组 - [userID]
	});
	tim.on(TIM.EVENT.ERROR, function(event) {
		// 收到 SDK 发生错误通知，可以获取错误码和错误信息
		// event.name - TIM.EVENT.ERROR
		// event.data.code - 错误码
		// event.data.message - 错误信息
	});
	tim.on(TIM.EVENT.SDK_NOT_READY, function(event) {
		// 收到 SDK 进入 not ready 状态通知，此时 SDK 无法正常工作
		// event.name - TIM.EVENT.SDK_NOT_READY
	});
	tim.on(TIM.EVENT.KICKED_OUT, function(event) {
		// 收到被踢下线通知
		// event.name - TIM.EVENT.KICKED_OUT
		// event.data.type - 被踢下线的原因，例如:
		//    - TIM.TYPES.KICKED_OUT_MULT_ACCOUNT 多实例登录被踢
		//    - TIM.TYPES.KICKED_OUT_MULT_DEVICE 多终端登录被踢
		//    - TIM.TYPES.KICKED_OUT_USERSIG_EXPIRED 签名过期被踢 （v2.4.0起支持）。 
	});
	tim.on(TIM.EVENT.NET_STATE_CHANGE, function(event) {
		//  网络状态发生改变（v2.5.0 起支持）。 
		// event.name - TIM.EVENT.NET_STATE_CHANGE 
		// event.data.state 当前网络状态，枚举值及说明如下： 
		//     \- TIM.TYPES.NET_STATE_CONNECTED - 已接入网络 
		//     \- TIM.TYPES.NET_STATE_CONNECTING - 连接中。很可能遇到网络抖动，SDK 在重试。接入侧可根据此状态提示“当前网络不稳定”或“连接中” 
		//    \- TIM.TYPES.NET_STATE_DISCONNECTED - 未接入网络。接入侧可根据此状态提示“当前网络不可用”。SDK 仍会继续重试，若用户网络恢复，SDK 会自动同步消息  
	});
}
